#include <iostream>

using namespace std;

struct ListNode
{
    double value;
    ListNode* next;
};

int main()
{
    ListNode* head = nullptr;
    
    head = new ListNode; 
    head->value = 1;    
    head->next = nullptr; 
    
    ListNode* secondPtr = new ListNode;
    secondPtr->value = 2;
    secondPtr->next = nullptr; //最后一个结点中的后继指针被设置为 nullptr 以指示链表的结束
    head->next = secondPtr; 
    
    cout << "First item is " << head->value << endl;
    cout << "Second item is " << head->next->value << endl;
    return 0;
}

/*
Advanced method：
构建一个构造函数：
struct ListNode
{
    double value;
    ListNode *next;
    //构造函数
    ListNode(double valuel, ListNode *nextl = nullptr)
    {
        value = value1;
        next = next1;
    }
};
然后上述的代码就可以简化为：ListNode *secondPtr = new ListNode(2);
                          ListNode *head = new ListNode(1, secondPtr);             
或者是这样表达：
ListNode *head = new ListNode(2);
head = new ListNode(1, head);//这样就相当于把第一次head所赋值的地址给变成了后一次head所指向的地址，似乎是更进一步的简化。

*/

// FIXME:
//  1. 做的很好！
//  2. 基本的函数式算法实现完了，可以在起一个新的文件，把C++封装的类实现一下。
//  3. 可以考虑如何更好的测试你的程序。你上面的程序仅仅插入2个节点，如果是插入100个如何？
